const Koa = require('koa')
const app = new Koa()
const json = require('koa-json')
//const onerror = require('koa-onerror')
const cors = require('koa-cors')
const serve = require('koa-static')
const path = require('path');
const bodyparser = require('koa-bodyparser')
const logger = require('koa-logger')
const {koaBody} = require('koa-body');

const db = require('./connection/sqlPool')

const index = require('./routes/index')
//const users = require('./routes/users')
const enoll = require('./routes/enoll')
const userList = require('./routes/userList')
const fileList = require('./routes/fileList')
const lineList = require('./routes/lineList')
// const pathList = require('./routes/pathList')
// const fileList = require('./routes/fileList')

// error handler
//onerror(app)

//koabody
app.use(koaBody({
  multipart: true,
  formidable: {
    uploadDir: './uploads', // 指定文件上传目录
    keepExtensions: true,   // 保持文件的后缀
  }
}));

// middlewares
app.use(
  cors({
      origin: function(ctx) { //设置允许来自指定域名请求
          if (ctx.url === '/test') {
              return '*'; // 允许来自所有域名请求
          }
          return 'http://localhost:8080'; //只允许http://localhost:8080这个域名的请求
      },
      maxAge: 5, //指定本次预检请求的有效期，单位为秒。
      credentials: true, //是否允许发送Cookie
      allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], //设置所允许的HTTP请求方法
      allowHeaders: ['Content-Type', 'Authorization', 'Accept'], //设置服务器支持的所有头信息字段
      exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'] //设置获取其他自定义字段
  })
);

app.use(bodyparser({
  enableTypes:['json', 'form', 'text']
}))
app.use(serve(path.join(__dirname, 'uploads')));
app.use(json())
app.use(logger())
//app.use(require('koa-static')(__dirname + '/public'))

// logger
app.use(async (ctx, next) => {
  const start = new Date()
  await next()
  const ms = new Date() - start
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})

//databases
app.use(async (ctx, next) => {
  ctx.db = db;
  await next();
})

// routes
app.use(index.routes(), index.allowedMethods())
//app.use(users.routes(), users.allowedMethods())
app.use(enoll.routes(), enoll.allowedMethods())
app.use(userList.routes(),userList.allowedMethods())
app.use(lineList.routes(),lineList.allowedMethods())
app.use(fileList.routes(),fileList.allowedMethods())
//app.use(pathList.routes(),pathList.allowedMethods())
// app.use(fileList.routes(),fileList.allowedMethods())


// error-handling
app.on('error', (err, ctx) => {
  console.error('server error', err, ctx)
});




module.exports = app
